home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
PRUS101.ZIP
/
FSWAP.DOC
< prev
next >
Wrap
Text File
|
1995-01-16
|
8KB
|
186 lines
/////////////////////\\\\\\\\\\\\\\\\\\\\\\\
Dokumentation zur FIDO Unit FSWAP
\\\\\\\\\\\\\\\\\\\\\///////////////////////
RELEASE 1.01
^^^^^^^^^^^^
=========================================================================
Autor: Peter Holschbach, 2:2450/660.3 @ FidoNet, Remscheid, 01.09.1994
=========================================================================
1. Swap :
-----------
Die Unit FSWAP.PAS stellt eine Funktion zur Verfügung, mit der
das aktuelle Pascalprogramm auf die Festplatte, ins XMS oder
EMS ausgelagert werden kann und eine DOS-Shell oder ein anders
Programm aufgerufen werden kann.
Dies ist eine Low Level Unit. Sie benötigt keinerlei Routinen
anderer Units, mit Ausnahme der in Turbo Pascals (6.0 oder
höher) Unit-Library TURBO.TPL enhaltenen Standard-Units.
2. Kurzbeschreibung:
--------------------
DosRetValue .......... in dieser Variablen wird der Rückkabewert
des aufgerufenen DOS-Programms abgelegt.
ExecSwap ............. führt die Auslagerung durch und ruft
das externe Programm auf.
SwapError ............ die Fehlernummer die beim letzten Versuch
aufgetreten ist.
SwapFilePath ......... Pfadangabe für die Auslagerungsdatei, wenn
auf Platte ausgelagert wird.
TSwapMem ............. Typ für die verschiedenen Auslagerungs-
varianten (DISK,EMS,XMS,Keine)
TSwapMemSelect ....... in diesem Feld wird abgelegt, in welcher
Reihenfolge die verschiedenen Auslagerungs-
medien abgesucht werden sollen.
3. Detaillierte Beschreibung:
-----------------------------
===============================================================
ExecSwap
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 01.09.1994 LETZTE ÄNDERUNG ...
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... Auslagerung / Aufruf / "Einlagerung"
DEKLARATION ... ExecSwap (LastAdr : Pointer;
WhereToSwap : TSwapMemSelect;
ProgName,Parameters : String): Boolean;
PARAMETER ... LastAdr = letzte Adresse die gesichert
werden soll.
WhereToSwap = Feld mit den gewünschten
Auslagerungsmedien
ProgName = Name des Programms daß ausgeführt
werden soll.
Parameters = die Parameterzeile die dem
Programm übergeben werden soll.
ERGEBNIS ... eine Variable des Typs BOOLEAN, die TRUE enthält,
wenn der Aufruf funktioniert hat.
Wird False zurückgeliefert, so kann in der
globalen Variablen SwapError eine Fehlernummer
abgefragt werden.
4. Beispiele:
-------------
===============================================================
ExecSwap
---------------------------------------------------------------
Da ein Beispiel mehr als 1000 Worte sagt:
;---------------------------------------
Uses FSWAP;
Var SwapField : TSwapMemSelect;
Begin
SwapField [1] := EMS;
SwapField [2] := XMS;
SwapField [3] := DISK;
SwapFilePath := 'D:\';
Writeln (ExecSwap (HeapEnd,SwapField,'C:\DOS\COMMAND.COM',''));
End.
;---------------------------------------
An dieser Stelle kommen die 1000 Worte:
Der von FSWAP benötigte Speicher hängt von der Art der
Einbindung ab. Um möglichst wenig zu verbrauchen, muß
die Unit immer an letzter Stelle eingebunden werden.
(Natürlich im Hauptprogramm !)
Pascal plaziert die Units immer in umgekehrter Reihenfolge
ihrer Benennung im Speicher.
Derzeit belegt das gezeigte Beispiel ca. 2,5KB im RAM, wobei
weitere 4KB für die Kopie von COMMAND.COM verlohren gehen.
Die Variable HeapEnd gibt in TP7 die letzte von Pascal belegte
Speicheradresse an. Hier kann auch jede andere Adresse stehen.
Verwendet man aber eine Adresse unterhalb dieser Marke, muß
sichergestellt sein, daß der darüberliegende Speicher unbenutzt
ist. ExecSwap gibt nämlich immer den gesamten Speicher frei.
Das Feld vom Typ "TSwapMemSelect" enthält die Medien, die für
die Auslagerung verwendet werden sollen. Gleichzeitig dient es
zur festlegung der Priorität (1=höchste, 2=mittlere, 3=niedrige).
Soll nur auf EMS zugegriffen werden so würde das Programm wie
folgt aussehen:
;---------------------------------------
Uses FSWAP;
Var SwapField : TSwapMemSelect;
Begin
SwapField [1] := EMS;
SwapField [2] := None;
SwapField [3] := None;
SwapFilePath := 'D:\';
Writeln (ExecSwap (HeapEnd,SwapField,'C:\DOS\COMMAND.COM',''));
End.
;---------------------------------------
Der Eintrag "None" bedeutet, daß an dieser Stelle kein Versuch
der Auslagerung unternommen werden soll.
In "ProgName" muß der Programmname übergeben werden. Der Anwender
muß selbst sicherstellen daß diese Programm existiert und unter
dem übergebenen Pfadnamen erreichbar ist. PATH wird von ExecSwap
nicht abgesucht!
In 'Parameters' kann man alle Kommandozeilenparameter übergeben,
die das Programm benötigt. Die Anzahl der übergebenen Zeichen ist
durch DOS auf 127 eingeschränkt!
Tritt beim Swapout ein Fehler auf, so kann die Variable SWAPERROR
abgefragt werden.
1 = XMS oder EMS nicht vorhanden
2 = Angabe des Speicherendes ist fehlerhaft
3 = nicht genügend Platz in EMS/DISK/XMS
4 = Fehler bei der Ermittlung des freien
Plattenspeichers
5 = Fehler bei Erzeugung einer temporären Datei
6 = Fehler beim Schreibzugriff auf die Datei
7 = Fehler beim Lesen der Datei
8 = Fehler bei der Ermittlung des zu sichernden
Speicherraums
9 = Fehler beim Allocieren des Speichers /EMS/DISK/XMS)
10 = Fehler bei der Auslagerung des RAM
Bei einigen Fehlern wird das MSB auf einen bestimmten
Wert gesetzt und im LSB eine Meldung für das entsprechende
Medium ausgegeben:
11 = Fehler bei der Speicherreduktion
255 = Fehler vom EMS/XMS-Manager
5. History:
-----------
Neuerungen nach Release ...
---------------------------
==========================================================================
/////////////////////\\\\\\\\\\\\\\\\\\\\\\\
Ende der Dokumentation zur FIDO Unit FSWAP
\\\\\\\\\\\\\\\\\\\\\///////////////////////